package com.papercutting.platform.service;

import com.papercutting.platform.dto.request.TutorialStepRequest;
import com.papercutting.platform.dto.response.TutorialStepResponse;
import com.papercutting.platform.entity.TutorialStep;

import java.util.List;

/**
 * 教程步骤服务接口
 */
public interface TutorialStepService {
    
    /**
     * 保存教程步骤
     */
    TutorialStep save(TutorialStep tutorialStep);
    
    /**
     * 根据ID查找教程步骤
     */
    TutorialStep findById(Long id);
    
    /**
     * 查找所有教程步骤
     */
    List<TutorialStep> findAll();
    
    /**
     * 根据ID删除教程步骤
     */
    void deleteById(Long id);
    
    /**
     * 根据教程ID查找步骤
     */
    List<TutorialStep> findByTutorialId(Long tutorialId);
    
    /**
     * 根据教程ID查找步骤并按步骤编号排序
     */
    List<TutorialStep> findByTutorialIdOrderByStepNumberAsc(Long tutorialId);
    
    /**
     * 根据教程ID和步骤编号查找步骤
     */
    TutorialStep findByTutorialIdAndStepNumber(Long tutorialId, Integer stepNumber);

    /**
     * 创建教程步骤
     */
    Long createStep(TutorialStepRequest request);

    /**
     * 更新教程步骤
     */
    void updateStep(TutorialStepRequest request);

    /**
     * 删除教程步骤
     */
    void deleteStep(Long id);

    /**
     * 根据ID获取教程步骤详情
     */
    TutorialStepResponse getStepById(Long id);

    /**
     * 根据教程ID获取步骤列表
     */
    List<TutorialStepResponse> getStepsByTutorialId(Long tutorialId);

    /**
     * 批量创建教程步骤
     */
    void batchCreateSteps(List<TutorialStepRequest> requests);

    /**
     * 重新排序教程步骤
     */
    void reorderSteps(Long tutorialId, List<Long> stepIds);

    // ========== 管理员API方法 ==========

    /**
     * 获取教程步骤列表（管理员）
     */
    List<TutorialStepResponse> getTutorialSteps(Long tutorialId);

    /**
     * 根据ID获取教程步骤详情（管理员）
     */
    TutorialStepResponse getTutorialStepById(Long id);

    /**
     * 创建教程步骤（管理员）
     */
    Long createTutorialStep(TutorialStepRequest request);

    /**
     * 更新教程步骤（管理员）
     */
    void updateTutorialStep(TutorialStepRequest request);

    /**
     * 删除教程步骤（管理员）
     */
    void deleteTutorialStep(Long id);

    /**
     * 批量创建教程步骤（管理员）
     */
    void batchCreateTutorialSteps(List<TutorialStepRequest> requests);

    /**
     * 重新排序教程步骤（管理员）
     */
    void reorderTutorialSteps(Long tutorialId, List<Long> stepIds);
}